package main

import "fmt"

type Vertex struct {
	x int
	y int
}

func main() {
	fmt.Println(Vertex{1, 2})

	v := Vertex{3, 5}
	// 结构体字段可通过点号 . 来访问。
	v.x = 33
	fmt.Println(v)

	// 如果我们有一个指向结构体的指针 p 那么可以通过 (*p).X 来访问其字段 X.
	// 不过这么写太啰嗦了，所以语言也允许我们使用隐式解引用，直接写 p.X 就可以。
	p := &v
	p.x = 11
	(*p).y = 63
	fmt.Println(p)  // print => &{11 63}
	fmt.Println(*p) // print => {11  63}

	// 使用 Name: 语法可以仅列出部分字段（字段名的顺序无关）。
	var (
		v1 = Vertex{1, 2}  // x=1 y=2
		v2 = Vertex{x: 33} // x=33 y=0
		v3 = Vertex{}      // x=0 y=0
		p1 = &Vertex{1, 2} // &{1, 2}
	)
	fmt.Println(v1, v2, v3, p1)
}
